package GC;

/**
 * @Desc:
 *      垃圾回收器概述：
 *          垃圾回收器在回收对象之前需要先判断一个对象是否存活，java使用根搜索方法来判断是否存活。基本思想是通过GC Roots的
 *          对象作为起始点，从这些节点向下搜索，当对象不能被任何一个GC Roots到达时该对象就认为是可回收的，但是仅凭对象可以
 *          被收集并不意味着垃圾收集器一次指定运行就能够回收它，由于各种垃圾收集算法有所不同，某些算法会更频繁地分析生存期
 *          较短的对象，而不是较老、生存期较长的对象。所以，一个可供收集的对象可能永远不会被回收。所以无法保证可供收集的对象
 *          总是会被垃圾收集器回收；
 *      术语：
 *          1.强可及对象(strongly reachable) :我们使用的大部分引用实际上都是强引用；Java虚拟机宁愿抛出OutOfMemoryError错误，
 *              使程序异常终止，也不会回收被强引用所引用的对象强引用是造成Java内存泄露的主要原因之一
 *          2.软可及对象(softly reachable) :如果内存空间足够，垃圾回收器就不会回收它，如果内存空间不足了，就会回收这些对象的内存；
 *          3.弱可及对象(weakly reachable) :如果一个对象只具有弱引用，那就类似于是可有可无的，弱引用与软引用的区别在于：只具
 *              有弱引用的对象拥有更短暂的生命周期，一旦发现了只具有弱引用的对象，不管当前内存空间足够与否，都会回收它的内存；
 *              由于垃圾回收器是一个优先级较低的线程， 因此不一定会很快发现那些只具有弱引用的对象，即只有等到系统 |垃圾回收机|
 *              制运行时才会被回收；
 *          4.虚可及对象(phantomly reachable) ：如果一个对象仅持有虚引用，那么它就和没有任何引用一样，在任何时候都可能被垃圾
 *              回收，程序也并不能通过虚引用访问被引用的对象;
 *          5.清除：将引用对象的referent域设置为null，并将引用类在堆中引用的对象声明为可结束的；
 *
 *      java内存管理：
 *          1.Java内存管理包括内存分配(创建Java对象)和内存回收(回收Java对象)；
 *          2.JVM的内存回收机制采用 有向图 方式来管理内存中的对象;
 *          3.有向图 优点能有效解决循环引用的问题、精度高,缺点是效率较低；
 *          必看:https://blog.csdn.net/daijin888888/article/details/49949283
 *
 *      类变量和实例变量的区别是什么:
 *          1.类变量也叫静态变量，也就是在变量前加了static 的变量；
 *          2.实例变量也叫对象变量，即没加static 的变量；
 *
 *      当对象被类变量和实例变量引用时在回收时的区别:
 *          1.被类变量引用时：只有类变量所在的类被销毁时，该引用对象才会进入可恢复状态；
 *          2.被实例变量引用时：当引用该对象的对象被销毁或在不可达状态时，该引用对象可以进入恢复状态；
 *
 * @author: cww
 * @DateTime: 2019/4/22 8:49
 */

public class GCTheory {
}
